package cn.sunshine.ymcc.service.impl;

import cn.sunshine.ymcc.domain.Login;
import cn.sunshine.ymcc.dto.LoginDto;
import cn.sunshine.ymcc.mapper.LoginMapper;
import cn.sunshine.ymcc.result.JSONResult;
import cn.sunshine.ymcc.service.ILoginService;
import cn.sunshine.ymcc.util.AssertUtil;
import cn.sunshine.ymcc.util.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * <p>
 * 登录表 服务实现类
 * </p>
 *
 * @author Mr.Jiang
 * @since 2022-08-04
 */
@Service
public class LoginServiceImpl extends ServiceImpl<LoginMapper, Login> implements ILoginService {
    private static final String TOKEN_URL = "http://localhost:10040/oauth/token?client_id=%s&client_secret=%s&grant_type=password&username=%s&redirect_uri=http://www.baidu.com&password=%s";

    @Override
    public JSONResult loginCommon(LoginDto loginDto) {
        int type = loginDto.getType();
        String clientId = null;
        String secret = null;
        if (type == 0) { // 0管理端
            clientId = "admin";
            secret = "123";
        } else if (type == 1) {
            clientId = "website";
            secret = "123";
        }
        AssertUtil.isNotNull(clientId, "clientId不能为空！！");
        String tokenURL = String.format(TOKEN_URL, clientId, secret, loginDto.getUsername(), loginDto.getPassword());
        // 调用工具类发送post请求 获取token
        String token = HttpUtil.sendPost(tokenURL, null);
        // 将结果转换成对象（可以使临时对象，也可以是map）
        Map map = JSONObject.parseObject(token, Map.class);
        if (token.contains("error_description")) {
            return JSONResult.error("账号或者密码错误！！");
        } else {
            // 刷新token（token即将过期时刷新当前时间加上expires_in后过期）
            // 在main.js里面，每一次的axios请求（前置拦截器）就会去校验token是否过期
            long timeOut = System.currentTimeMillis() + Long.valueOf(map.get("expires_in").toString());
            map.put("expiresTime", timeOut);
            return JSONResult.success(map);
        }

    }

}

